#!/usr/bin/env python3
# -*- coding: utf-8 -*-

"""
账本 - 账本通知解析功能使用示例
"""

import os
import sys

# 添加项目根目录到Python路径，确保能够导入jlpay包
sys.path.insert(0, os.path.dirname(os.path.dirname(os.path.dirname(os.path.abspath(__file__)))))

from examples.base_example import BaseExample
from jlpay.services.ledger.notify_service import NotifyService


class LedgerNotifyExample(BaseExample):
    """账本通知解析示例类"""
    
    def __init__(self):
        """初始化示例类"""
        super().__init__("examples.ledger.notify")
        self.service = NotifyService(self.config)
    
    def build_notify_data(self):
        """构建模拟通知数据"""
        notify_data = {
            "org_code": "50720711",
            "mch_id": "849581183510017",
            "ledger_module": "02",
            "status": "SUCCESS",
            "reason": "审核通过"
        }
        return notify_data
    
    def parse_notify_and_handle_response(self, notify_data, operation_name):
        """解析通知并处理响应"""
        try:
            # 解析通知消息
            notify_dto = self.service.parse_notify(notify_data)
            
            if notify_dto:
                self.logger.info(f"{operation_name}成功！")
                return notify_dto
            else:
                self.logger.error(f"{operation_name}失败：通知解析失败，可能是签名验证失败或数据格式错误")
                return None
                
        except Exception as e:
            self.logger.error(f"请求异常: {str(e)}")
            return None
    
    def demo(self):
        """执行账本通知解析示例"""
        self.logger.info("开始执行账本通知解析示例")
        
        # 构建模拟通知数据
        notify_data = self.build_notify_data()
        
        # 解析通知消息
        notify_dto = self.parse_notify_and_handle_response(notify_data, "账本通知解析")
        
        # 处理响应结果
        if notify_dto:
            self.logger.info(f"机构代码：{notify_dto.org_code}")
            self.logger.info(f"商户号：{notify_dto.mch_id}")
            self.logger.info(f"分账模块：{notify_dto.ledger_module}")
            self.logger.info(f"状态：{notify_dto.status}")
            self.logger.info(f"原因：{notify_dto.reason}")
            
            # 根据通知内容进行业务处理
            if notify_dto.status == "SUCCESS":
                self.logger.info("通知状态为成功，可以进行后续业务处理")
            elif notify_dto.status == "FAILED":
                self.logger.info("通知状态为失败，需要处理失败情况")
            else:
                self.logger.info(f"未知状态：{notify_dto.status}")
        
        self.logger.info("账本通知解析示例执行完毕")


if __name__ == "__main__":
    logger = LedgerNotifyExample().logger
    logger.info("=" * 50)
    logger.info("===== 账本通知解析示例 开始 =====")
    logger.info("=" * 50)
    
    example = LedgerNotifyExample()
    example.demo()
    
    logger.info("=" * 50)
    logger.info("===== 账本通知解析示例执行完毕 =====")
    logger.info("=" * 50) 